package com.zhf.douyinvideo.base;

import android.content.Context
import android.os.Bundle
import android.support.annotation.LayoutRes
import android.support.v4.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup

/**
 * Desc:
 *
 * @author zhf
 * @time 2019/7/30 10:02
 */
abstract class RootFragment : Fragment() {
    protected var mRoot: View? = null

    // 标示是否第一次初始化数据
    protected var mIsFirstInitData = true

    /**
     * 得到当前界面的资源文件Id
     *
     * @return 资源文件Id
     */
    @get:LayoutRes
    protected abstract val contentLayoutId: Int

    /**
     * 刚添加到Activity中时，首先触发的方法
     *
     * @param context
     */
    override fun onAttach(context: Context?) {
        super.onAttach(context)

        // 初始化参数
        initArgs(arguments)

    }

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        if (mRoot == null) {
            val layId = contentLayoutId
            // 初始化当前的跟布局，但是不在创建时就添加到container里边
            val root = inflater.inflate(layId, container, false)
            initWidget(root)
            mRoot = root
        } else {
            if (mRoot!!.parent != null) {
                // 把当前Root从其父控件中移除
                (mRoot!!.parent as ViewGroup).removeView(mRoot)
            }
        }
        return mRoot
    }


    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        if (mIsFirstInitData) {
            // 触发一次以后就不会触发
            mIsFirstInitData = false
            // 触发
            onFirstInit()
        }
        initBefore()
        // 当View创建完成后初始化数据
        initData()
        addListener()
    }

    /**
     * 初始化相关参数
     */
    open  protected fun initArgs(bundle: Bundle?) {

    }

    /**
     * 初始化控件调用之前
     */
    open protected fun initBefore() {}


    /**
     * 初始化控件
     */
    open protected fun initWidget(root: View) {

    }

    /**
     * 添加点击事件
     */
    open protected fun addListener() {

    }

    /**
     * 初始化数据
     */
    open protected fun initData() {

    }

    /**
     * 当首次初始化数据的时候会调用的方法
     */
    open protected fun onFirstInit() {

    }

    /**
     * 返回按键触发时调用
     *
     * @return 返回True代表我已处理返回逻辑，Activity不用自己finish。
     * 返回False代表我没有处理逻辑，Activity自己走自己的逻辑
     */
    open fun onBackPressed(): Boolean {
        return false
    }


}
